package com.dingding.common.core.base.daox;

import java.util.List;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;

/**
 * 
 * @ClassName: ICriteriaBaseDao 
 * @Description: Criteria查询
 * @author CHEHAUNBO 
 * @date 2016年8月21日 下午2:03:23
 * @since V2.4.0
 * @version 1.0
 * 
 */
public interface ICriteriaBaseDao extends IBaseDaoX {

	/**
	 * 
	 * @Title: queryCriteriaList 
	 * @Description: 根据条件查询数据
	 * @param 查询的数据库映射类
	 * @param criterion 查询条件 
	 * @return List<T> 查询到的数据集合
	 * @author CHEHUANBO 
	 * 
	 */
	public <T> List<T> queryCriteriaList(Class<T> clazz, Criterion criterion);

	/**
	 * 
	 * @Title: queryCriteriaList 
	 * @Description: 根据条件查询数据
	 * @param criterion 查询条件 
	 * @return List<T> 查询到的数据集合 
	 * @author CHEHUANBO 
	 * 
	 */
	public <T> List<T> queryCriteriaList(Class<T> clazz);

	/**
	 * 
	 * 根据条件查询数据
	 * @Title: queryCriteriaList 
	 * @param Class<T> 查询的类
	 * @param criterion 查询条件
	 * @param List<Order> 排序集合
	 * @param page 当前页
	 * @param pageSize 每页显示记录数
	 * @return List<T> 查询到的数据集合 
	 * @author CHEHUANBO 
	 * 
	 */
	public <T> List<T> queryCriteriaList(Class<T> clazz, Criterion criterion, List<Order> orders, int page,
			int pageSize);

	/**
	 * 
	 * @Title: queryCriteriaListUnique 
	 * @Description: 根据条件查询单条数据
	 * @param clazz 查询类
	 * @param criterion 查询条件 
	 * @return List<T> 查询到的数据集合 
	 * @author CHEHUANBO 
	 * 
	 */
	public <T> T queryCriteriaListUnique(Class<T> clazz, Criterion criterion);

	/**
	 * 
	 * @Title: queryCriteriaList 
	 * @Description: 根据条件查询数据
	 * @param criterion 查询条件 
	 * @return List<T> 查询到的数据集合 
	 * @author CHEHUANBO 
	 * 
	 */
	public <T> List<T> queryCriteriaList(Class<T> clazz, Criterion criterion, Order order);

	/**
	 * 
	 * @Title: queryCriteriaList 
	 * @Description: 根据条件查询数据
	 * @param criterion 查询条件 
	 * @return List<T> 查询到的数据集合 
	 * @author CHEHUANBO 
	 * 
	 */
	public <T> List<T> queryCriteriaList(Class<T> clazz, Criterion criterion, List<Order> orders);

}
